/**
 * 程序入口
 */
import { createInterface } from 'readline';
import { syncExcelToDatabase } from './services/syncService.js';
import { listAllPunchRecords, queryPunchRecordsByEmployeeId } from './services/punchService.js';
import { addNameTokenMapping, listAllNameTokenMappings } from './services/mappingService.js';

// 创建命令行交互界面
const rl = createInterface({
  input: process.stdin,
  output: process.stdout
});

// 显示菜单
function showMenu() {
  console.log('\n===== 打卡助手系统 =====');
  console.log('1. 同步 EXCEL 数据到云数据库');
  console.log('2. 列出所有云端打卡数据');
  console.log('3. 查询特定工号云端打卡数据');
  console.log('4. 新增姓名和 TOKEN 映射');
  console.log('5. 列出所有姓名和 TOKEN 映射');
  console.log('9. 退出程序');
  console.log('=====================');
  rl.question('请输入操作编号: ', handleUserInput);
}

// 处理用户输入
async function handleUserInput(choice) {
  switch (choice) {
    case '1':
      try {
        console.log('开始同步EXCEL数据到云数据库...');
        await syncExcelToDatabase();
        console.log('同步完成！');
      } catch (error) {
        console.error('同步过程中出错:', error.message);
      }
      break;

    case '2':
      try {
        console.log('获取所有打卡记录...');
        const records = await listAllPunchRecords();
        console.log('打卡记录列表:');
        console.table(records);
      } catch (error) {
        console.error('获取打卡记录时出错:', error.message);
      }
      break;

    case '3':
      rl.question('请输入要查询的工号: ', async (employeeId) => {
        try {
          console.log(`查询工号 ${employeeId} 的打卡记录...`);
          const records = await queryPunchRecordsByEmployeeId(employeeId);
          if (records.length > 0) {
            console.log('查询结果:');
            console.table(records);
          } else {
            console.log('未找到该工号的打卡记录');
          }
        } catch (error) {
          console.error('查询打卡记录时出错:', error.message);
        }
        showMenu();
        return;
      });
      return; // 防止立即显示菜单

    case '4':
      rl.question('请输入姓名: ', (name) => {
        rl.question('请输入TOKEN: ', async (token) => {
          try {
            console.log(`添加姓名 ${name} 和TOKEN ${token} 的映射...`);
            await addNameTokenMapping(name, token);
            console.log('添加成功！');
          } catch (error) {
            console.error('添加映射时出错:', error.message);
          }
          showMenu();
        });
      });
      return; // 防止立即显示菜单

    case '5':
      try {
        console.log('获取所有姓名和TOKEN映射...');
        const mappings = await listAllNameTokenMappings();
        console.log('姓名和TOKEN映射列表:');
        console.table(mappings);
      } catch (error) {
        console.error('获取映射列表时出错:', error.message);
      }
      break;

    case '9':
      console.log('感谢使用，再见！');
      rl.close();
      return;

    default:
      console.log('无效的选择，请重新输入');
  }

  // 除了需要额外输入的选项外，其他选项处理完后显示菜单
  showMenu();
}

// 程序启动
console.log('打卡助手服务启动中...');
showMenu();

// 处理程序退出
rl.on('close', () => {
  console.log('程序已退出');
  process.exit(0);
});